//---------------------------------------------------------------------- // Spawn Spawn::Spawn() : Item(tSpawn, 0) { m_name = "fake"; m_lastName = ""; setNPC(SPAWN_NPC_UNKNOWN); Item::setPos(0, 0, 0); setDeltas(0, 0, 0); setHeading(0, 0); setAnimation(0); setPetOwnerID(0); setLight(0); setGender(0); setDeity(0); setRace(0); setClassVal(0); setHP(0); setMaxHP(0); setGuildID(0xffff); setGuildTag(NULL); setLevel(0); setTypeflag(0); setGM(0); for (int i = 0; i < tNumWearSlots; i++) setEquipment(i, SlotEmpty); // just clear the considred flag since data would be outdated setConsidered(false); // finally, note when this update occurred. updateLast(); }
Spawn::Spawn(Spawn* s, uint16_t id) : Item(tSpawn, id) { setName(s->name()); setLastName(s->lastName()); Item::setPoint(s->x(), s->y(), s->z()); setPetOwnerID(s->petOwnerID()); setLight(s->light()); setGender(s->gender()); setDeity(s->deity()); setRace(s->race()); setClassVal(s->classVal()); setHP(s->HP()); setMaxHP(s->maxHP()); setGuildID(s->guildID()); setLevel(s->level()); for (int i = 0; i <= tLastCoreWearSlot; i++) setEquipment(i, s->equipment(i)); setEquipment(tUnknown1, SlotEmpty); setTypeflag(s->typeflag()); setGM(s->gm()); setNPC(s->NPC()); setAnimation(s->animation()); setDeltas(s->deltaX(), s->deltaY(), s->deltaZ()); setHeading(s->heading(), s->deltaHeading()); setConsidered(s->considered()); // the new copy will own the spawn track list m_spawnTrackList.setAutoDelete(false); m_spawnTrackList = s->m_spawnTrackList; s->m_spawnTrackList.setAutoDelete(false); m_spawnTrackList.setAutoDelete(true); }
void LocalPlayer::setGMLevel(int level) { mGMLevel = level; if (level > 0) setGM(true); }
Spawn::Spawn(Spawn& s, uint16_t id) : Item(tSpawn, id) { setName(s.name()); setLastName(s.lastName()); Item::setPoint(s.x(), s.y(), s.z()); setPetOwnerID(s.petOwnerID()); setLight(s.light()); setGender(s.gender()); setDeity(s.deity()); setRace(s.race()); setClassVal(s.classVal()); setHP(s.HP()); setMaxHP(s.maxHP()); setGuildID(s.guildID()); setLevel(s.level()); for (int i = 0; i <= tLastCoreWearSlot; i++) setEquipment(i, s.equipment(i)); setEquipment(tUnknown1, 0); setTypeflag(s.typeflag()); setGM(s.gm()); setNPC(s.NPC()); setAnimation(s.animation()); setDeltas(s.deltaX(), s.deltaY(), s.deltaZ()); setHeading(s.heading(), s.deltaHeading()); setConsidered(s.considered()); // the new copy will own the spawn track list m_spawnTrackList.setAutoDelete(false); m_spawnTrackList = s.m_spawnTrackList; s.m_spawnTrackList.setAutoDelete(false); m_spawnTrackList.setAutoDelete(true); }
Spawn::Spawn(uint16_t id, int16_t x, int16_t y, int16_t z, int16_t deltaX, int16_t deltaY, int16_t deltaZ, int8_t heading, int8_t deltaHeading, uint8_t animation) : Item(tSpawn, id) { // apply the unknown mob values m_name = "unknown"; m_lastName = ""; setNPC(SPAWN_NPC_UNKNOWN); // set what is known setPos(x, y, z); setDeltas(deltaX, deltaY, deltaZ); setHeading(heading, deltaHeading); setAnimation(animation); // initialize what isn't to 0 setPetOwnerID(0); setLight(0); setGender(0); setDeity(0); setRace(0); setClassVal(0); setHP(0); setMaxHP(0); setLevel(0); setGuildID(0xffff); setGuildTag(NULL); for (int i = 0; i < tNumWearSlots; i++) setEquipment(i, SlotEmpty); setTypeflag(0); setGM(0); setConsidered(false); // turn on auto delete for the track list m_spawnTrackList.setAutoDelete(true); // Finally, note when this update ocurred updateLast(); }
void Spawn::update(const spawnStruct* s) { if (m_name.find(Spawn_Corpse_Designator) == -1) { setName(s->name); setLastName(s->lastName); } setPos(s->x >> 3, s->y >> 3, s->z >> 3); setPetOwnerID(s->petOwnerId); setLight(s->light); setGender(s->gender); setDeity(s->deity); setRace(s->race); setClassVal(s->class_); setHP(s->curHp); //setMaxHP(s->maxHp); setMaxHP(s->curHp); //maxHp is no longer part of the struct setGuildID(s->guildID); setLevel(s->level); for (int i = 0; i <= tLastCoreWearSlot; i++) setEquipment(i, s->equipment[i]); setEquipment(tUnknown1, 0); setTypeflag(s->bodytype); setGM(s->gm); // If it is a corpse with Unknown (NPC) religion. if ((s->NPC == SPAWN_PC_CORPSE) && (s->deity == DEITY_UNKNOWN)) setNPC(SPAWN_NPC_CORPSE); // it's a dead monster else setNPC(s->NPC); // otherwise it is what it is setAnimation(s->animation); // only non corpses and things with animation != 66 move if (!isCorpse() && (s->animation != 66)) { setDeltas(s->deltaX >> 2, s->deltaY >> 2, s->deltaZ >> 2); setHeading(s->heading, s->deltaHeading); }
static int handle_setcheck(sessionid_t sessionid, bus_t bus, char *device, char *parameter, char *reply, int setorcheck) { struct timeval time; int rc = SRCP_UNSUPPORTEDDEVICEGROUP; *reply = 0x00; if (bus_has_devicegroup(bus, DG_GL) && strncasecmp(device, "GL", 2) == 0) { long laddr, direction, speed, maxspeed, f[29]; int func, i, anzparms; func = 0; /* We could provide a maximum of 32 on/off functions, but for now 28+1 will be good enough */ anzparms = sscanf(parameter, "%ld %ld %ld %ld %ld %ld %ld %ld " "%ld %ld %ld %ld %ld %ld %ld %ld %ld " "%ld %ld %ld %ld %ld %ld %ld %ld " "%ld %ld %ld %ld %ld %ld %ld %ld", &laddr, &direction, &speed, &maxspeed, &f[0], &f[1], &f[2], &f[3], &f[4], &f[5], &f[6], &f[7], &f[8], &f[9], &f[10], &f[11], &f[12], &f[13], &f[14], &f[15], &f[16], &f[17], &f[18], &f[19], &f[20], &f[21], &f[22], &f[23], &f[24], &f[25], &f[26], &f[27], &f[28]); for (i = 0; i < anzparms - 4; i++) { func += (f[i] ? 1 : 0) << i; } if (anzparms >= 4) { sessionid_t lockid = 0; /* Only if not locked or emergency stop !! */ cacheGetLockGL(bus, laddr, &lockid); if (lockid == 0 || lockid == sessionid || direction == 2) { rc = SRCP_OK; if (setorcheck == 1) rc = enqueueGL(bus, laddr, direction, speed, maxspeed, func); } else { rc = SRCP_DEVICELOCKED; } } else { rc = SRCP_LISTTOOSHORT; } } else if (bus_has_devicegroup(bus, DG_GA) && strncasecmp(device, "GA", 2) == 0) { long gaddr, port, aktion, delay; sessionid_t lockid; int anzparms; anzparms = sscanf(parameter, "%ld %ld %ld %ld", &gaddr, &port, &aktion, &delay); if (anzparms >= 4) { /* Port 0,1; Action 0,1 */ /* Only if not locked!! */ getlockGA(bus, gaddr, &lockid); if (lockid == 0 || lockid == sessionid) { rc = SRCP_OK; if (setorcheck == 1) rc = enqueueGA(bus, gaddr, port, aktion, delay); } else { rc = SRCP_DEVICELOCKED; } } else { rc = SRCP_LISTTOOSHORT; } } else if (bus_has_devicegroup(bus, DG_FB) && strncasecmp(device, "FB", 2) == 0) { long fbport, value; int anzparms; anzparms = sscanf(parameter, "%ld %ld", &fbport, &value); if (anzparms >= 2) { if (setorcheck == 1) rc = setFB(bus, fbport, value); } } /* SET 0 GM "<send_to_id> <reply_to_id> <message_type> <message>" */ else if (bus_has_devicegroup(bus, DG_GM) && strncasecmp(device, "GM", 2) == 0) { sessionid_t sendto, replyto; int result; char msg[MAXSRCPLINELEN]; memset(msg, 0, sizeof(msg)); /*TODO: scan also message type */ result = sscanf(parameter, "%lu %lu %990c", &sendto, &replyto, msg); if (result < 3) rc = SRCP_LISTTOOSHORT; else rc = setGM(sendto, replyto, msg); } /* SET <bus> SM "<decoderaddress> <type> <1 or more values>" */ else if (bus_has_devicegroup(bus, DG_SM) && strncasecmp(device, "SM", 2) == 0) { long addr, value1, value2, value3; int type; int result; char ctype[MAXSRCPLINELEN]; result = sscanf(parameter, "%ld %s %ld %ld %ld", &addr, ctype, &value1, &value2, &value3); if (result < 4) rc = SRCP_LISTTOOSHORT; else { type = -1; if (strcasecmp(ctype, "REG") == 0) type = REGISTER; else if (strcasecmp(ctype, "CV") == 0) type = CV; else if (strcasecmp(ctype, "CVBIT") == 0) type = CV_BIT; else if (strcasecmp(ctype, "PAGE") == 0) type = PAGE; if (type == -1) rc = SRCP_WRONGVALUE; else { if (type == CV_BIT) if (result < 5) rc = SRCP_LISTTOOSHORT; else rc = infoSM(bus, SET, type, addr, value1, value2, value3, reply); else rc = infoSM(bus, SET, type, addr, value1, 0, value2, reply); } } } else if (bus_has_devicegroup(bus, DG_TIME) && strncasecmp(device, "TIME", 4) == 0) { long d, h, m, s, nelem; nelem = sscanf(parameter, "%ld %ld %ld %ld", &d, &h, &m, &s); if (nelem >= 4) { rc = SRCP_OK; if (setorcheck == 1) rc = setTIME(d, h, m, s); } else rc = SRCP_LISTTOOSHORT; } else if (bus_has_devicegroup(bus, DG_LOCK) && strncasecmp(device, "LOCK", 4) == 0) { long int addr, duration; char devgrp[MAXSRCPLINELEN]; int nelem = -1; if (strlen(parameter) > 0) { nelem = sscanf(parameter, "%s %ld %ld", devgrp, &addr, &duration); syslog_bus(bus, DBG_INFO, "LOCK: %s", parameter); } if (nelem >= 3) { rc = SRCP_UNSUPPORTEDDEVICEGROUP; if (strncmp(devgrp, "GL", 2) == 0) { rc = SRCP_OK; if (setorcheck == 1) rc = cacheLockGL(bus, addr, duration, sessionid); } else if (strncmp(devgrp, "GA", 2) == 0) { rc = SRCP_OK; if (setorcheck == 1) rc = lockGA(bus, addr, duration, sessionid); } } else { rc = SRCP_LISTTOOSHORT; } } else if (bus_has_devicegroup(bus, DG_POWER) && strncasecmp(device, "POWER", 5) == 0) { int nelem; char state[5], msg[256]; memset(msg, 0, sizeof(msg)); nelem = sscanf(parameter, "%3s %100c", state, msg); if (nelem >= 1) { rc = SRCP_WRONGVALUE; if (strncasecmp(state, "OFF", 3) == 0) { rc = SRCP_OK; if (setorcheck == 1) rc = setPower(bus, 0, msg); } else if (strncasecmp(state, "ON", 2) == 0) { rc = SRCP_OK; if (setorcheck == 1) rc = setPower(bus, 1, msg); } } else { rc = SRCP_LISTTOOSHORT; } } gettimeofday(&time, NULL); srcp_fmt_msg(rc, reply, time); return rc; }