int getRangedValue( std::string str ) { int lovalue , hivalue , retcode = 0; gettokennum( str, 0); lovalue=str2num(gettokenstr); gettokennum( str, 1); hivalue=str2num(gettokenstr); if (hivalue) { retcode = RandomNum(lovalue, hivalue); } else { retcode = lovalue; } return retcode; }
// Added by Krozy on 7-Sep-98 // New getstatskillvalue function. // Takes a string, gets the tokens. // If its one value - It returns that value. // If its two values - It gets a random number between the values int getRangedValue(char *stringguy) { char values[512]; int lovalue,hivalue,retcode; strcpy(values, stringguy); gettokennum(values, 0); lovalue=str2num(gettokenstr); gettokennum(values, 1); hivalue=str2num(gettokenstr); if (hivalue) { retcode = RandomNum(lovalue, hivalue); } else { retcode = lovalue; } return retcode; }
P_CHAR cCharStuff::AddNPC(int s, P_ITEM pi_i, int npcNum, int x1, int y1, signed char z1) { int tmp, z, lovalue, hivalue; int k=0, xos=0, yos=0, lb; char sect[512]; int haircolor = -1; //(we need this to remember the haircolor) short postype; // determines how xyz of the new NPC are set, see below short fx1,fx2,fy1,fy2,fz1; // temp. hold the rectangle or circle for npcwander from script fx1=fx2=fy1=fy2=fz1=0; if (x1 > 0 && y1 > 0) postype = 3; // take position from parms else if ( s != -1 && pi_i == NULL) postype = 2; // take position from socket's buffer else if ( s == -1 && pi_i != NULL) postype = 1; // take position from items[i] else { clConsole.send("ERROR: bad parms in call to AddNPC\n"); return NULL; } P_ITEM pBackpack = NULL; P_ITEM retitem = NULL; P_ITEM shoppack1 = NULL; P_ITEM shoppack2 = NULL; P_ITEM shoppack3 = NULL; // // First things first...lets find out what NPC# we should spawn // Script *pScpBase=i_scripts[npc_script]; sprintf(sect, "NPC %i", npcNum); Script *pScp=pScpBase->Select(sect,custom_npc_script); if (!pScp) return NULL; unsigned long loopexit=0; do { pScp->NextLineSplitted(); if (script1[0]!='}') { if (!(strcmp("NPCLIST", (char*)script1))) { npcNum = Npcs->getRandomNPC((char*)script2); sprintf(sect, "NPC %i", npcNum); break; } } } while ( (script1[0]!='}') && (++loopexit < MAXLOOPS) ); pScp->Close(); // // Now lets spawn him/her // P_CHAR pc_c = Npcs->MemCharFree(); if ( pc_c == NULL ) return NULL; pc_c->Init(); pc_c->setPriv(0x10); pc_c->npc=1; pc_c->att=1; pc_c->def=1; pc_c->spawnserial = INVALID_SERIAL; pScp=pScpBase->Select(sect,custom_npc_script); if (!pScp) { Npcs->DeleteChar(pc_c); return NULL; } loopexit=0; do { pScp->NextLineSplitted(); if (script1[0]!='}') { switch(script1[0]) { case 'A': case 'a': if (!strcmp("ALCHEMY",(char*)script1)) pc_c->baseskill[ALCHEMY] = getstatskillvalue((char*)script2); else if (!strcmp("ANATOMY",(char*)script1)) pc_c->baseskill[ANATOMY] = getstatskillvalue((char*)script2); else if (!strcmp("ARCHERY",(char*)script1)) pc_c->baseskill[ARCHERY] = getstatskillvalue((char*)script2); else if (!strcmp("ARMSLORE",(char*)script1)) pc_c->baseskill[ARMSLORE] = getstatskillvalue((char*)script2); else if (!strcmp("ANIMALLORE",(char*)script1)) pc_c->baseskill[ANIMALLORE] = getstatskillvalue((char*)script2); break; case 'B': case 'b': if (!strcmp("BACKPACK", (char*)script1)) { if (pBackpack == NULL) { scpMark m=pScp->Suspend(); pBackpack = Items->SpawnItem(-1, pc_c,1,"Backpack",0,0x0E,0x75,0,0,0); if(pBackpack == NULL) { Npcs->DeleteChar(pc_c); return NULL; } pc_c->packitem = pBackpack->serial; pBackpack->pos.x=0; pBackpack->pos.y=0; pBackpack->pos.z=0; pBackpack->SetContSerial(pc_c->serial); pBackpack->layer=0x15; pBackpack->type=1; pBackpack->dye=1; retitem = pBackpack; pScp->Resume(m); strcpy((char*)script1, "DUMMY"); // Prevents unexpected matchups... } } else if (!strcmp("BEGGING",(char*)script1)) pc_c->baseskill[BEGGING] = getstatskillvalue((char*)script2); else if (!strcmp("BLACKSMITHING",(char*)script1)) pc_c->baseskill[BLACKSMITHING] = getstatskillvalue((char*)script2); else if (!strcmp("BOWCRAFT",(char*)script1)) pc_c->baseskill[BOWCRAFT] = getstatskillvalue((char*)script2); break; case 'C': case 'c': if (!strcmp("COLOR",(char*)script1)) { if (retitem != NULL) { retitem->color = hex2num(script2); } } else if (!strcmp("CARVE",(char*)script1)) pc_c->carve=str2num(script2); else if (!strcmp("CAMPING",(char*)script1)) pc_c->baseskill[CAMPING] = getstatskillvalue((char*)script2); else if (!strcmp("CARPENTRY",(char*)script1)) pc_c->baseskill[CARPENTRY] = getstatskillvalue((char*)script2); else if (!strcmp("CARTOGRAPHY",(char*)script1)) pc_c->baseskill[CARTOGRAPHY] = getstatskillvalue((char*)script2); else if (!strcmp("CANTRAIN",(char*)script1)) pc_c->cantrain=true; else if (!strcmp("COOKING",(char*)script1)) pc_c->baseskill[COOKING] = getstatskillvalue((char*)script2); else if (!strcmp("COLORMATCHHAIR",(char*)script1)) { if (retitem != NULL && haircolor!=-1) { retitem->color = (haircolor); } } else if (!strcmp("COLORLIST",(char*)script1)) { scpMark m=pScp->Suspend(); unsigned short storeval = addrandomcolor(pc_c, (char*)script2); if (retitem != NULL) { retitem->color = storeval; } pScp->Resume(m); strcpy((char*)script1, "DUMMY"); // To prevent accidental exit of loop. } break; case 'D': case 'd': if (!strcmp("DIRECTION",(char*)script1)) { if (!strcmp("NE",(char*)script2)) pc_c->dir=1; else if (!strcmp("E",(char*)script2)) pc_c->dir=2; else if (!strcmp("SE",(char*)script2)) pc_c->dir=3; else if (!strcmp("S",(char*)script2)) pc_c->dir=4; else if (!strcmp("SW",(char*)script2)) pc_c->dir=5; else if (!strcmp("W",(char*)script2)) pc_c->dir=6; else if (!strcmp("NW",(char*)script2)) pc_c->dir=7; else if (!strcmp("N",(char*)script2)) pc_c->dir=0; } else if (!strcmp("DEX",(char*)script1) || !strcmp("DEXTERITY",(char*)script1)) { pc_c->setDex(getstatskillvalue((char*)script2)); pc_c->stm = pc_c->realDex(); } else if (!strcmp("DEF",(char*)script1)) pc_c->def = getstatskillvalue((char*)script2); else if (!strcmp("DETECTINGHIDDEN",(char*)script1)) pc_c->baseskill[DETECTINGHIDDEN] = getstatskillvalue((char*)script2); else if (!strcmp("DAMAGE",(char*)script1) || !strcmp("ATT",(char*)script1)) { gettokennum((char*)script2, 0); lovalue=str2num(gettokenstr); gettokennum((char*)script2, 1); hivalue=str2num(gettokenstr); pc_c->lodamage = lovalue; pc_c->hidamage = lovalue; if(hivalue) { pc_c->hidamage = hivalue; } } break; case 'E': case 'e': if (!(strcmp("EMOTECOLOR",(char*)script1))) { pc_c->emotecolor = (hex2num(script2)); } else if (!strcmp("ENTICEMENT",(char*)script1)) pc_c->baseskill[ENTICEMENT] = getstatskillvalue((char*)script2); else if (!strcmp("EVALUATINGINTEL",(char*)script1)) pc_c->baseskill[EVALUATINGINTEL] = getstatskillvalue((char*)script2); break; case 'F': case 'f': if (!strcmp("FISHING",(char*)script1)) pc_c->baseskill[FISHING] = getstatskillvalue((char*)script2); else if (!strcmp("FORENSICS",(char*)script1)) pc_c->baseskill[FORENSICS] = getstatskillvalue((char*)script2); else if (!strcmp("FX1",(char*)script1)) fx1=str2num(script2); // new NPCWANDER implementation else if (!strcmp("FX2",(char*)script1)) fx2=str2num(script2); else if (!strcmp("FLEEAT",(char*)script1)) pc_c->fleeat=str2num(script2); else if (!strcmp("FAME",(char*)script1)) pc_c->fame=str2num(script2); else if (!strcmp("FENCING",(char*)script1)) pc_c->baseskill[FENCING] = getstatskillvalue((char*)script2); else if (!strcmp("FY1",(char*)script1)) fy1=str2num(script2); else if (!strcmp("FY2",(char*)script1)) fy2=str2num(script2); else if (!strcmp("FZ1",(char*)script1)) fz1=str2num(script2); break; case 'G': case 'g': if (!strcmp("GOLD", (char*)script1)) { if (pBackpack != NULL) { scpMark m=pScp->Suspend(); P_ITEM pGold = Items->SpawnItem(pc_c,1,"#",1,0x0EED,0,1); if(!pGold) { Npcs->DeleteChar(pc_c); return NULL; } pScp->Resume(m); pGold->priv|=0x01; gettokennum((char*)script2, 0); lovalue=str2num(gettokenstr); gettokennum((char*)script2, 1); hivalue=str2num(gettokenstr); if (hivalue==0) { if (lovalue/2!=0) pGold->amount=lovalue/2 + (rand()%(lovalue/2)); else pGold->amount=0; } else { if (hivalue-lovalue!=0) pGold->amount=lovalue + (rand()%(hivalue-lovalue)); else pGold->amount=lovalue; } } else clConsole.send("Warning: Bad NPC Script %d with problem no backpack for gold.\n", npcNum); } break; case 'H': case 'h': if (!strcmp("HEALING",(char*)script1)) pc_c->baseskill[HEALING] = getstatskillvalue((char*)script2); else if (!strcmp("HIDAMAGE",(char*)script1)) pc_c->hidamage=str2num(script2); else if (!strcmp("HERDING",(char*)script1)) pc_c->baseskill[HERDING] = getstatskillvalue((char*)script2); else if (!strcmp("HIDING",(char*)script1)) pc_c->baseskill[HIDING] = getstatskillvalue((char*)script2); else if (!strcmp("HAIRCOLOR",(char*)script1)) { scpMark m=pScp->Suspend(); if (retitem != NULL) // LB, ouple of bugfixes { haircolor=addrandomhaircolor(pc_c,(char*)script2); if (haircolor!=-1) { retitem->color = (haircolor); } } pScp->Resume(m); strcpy((char*)script1, "DUMMY"); // To prevent accidental exit of loop. } break; case 'I': case 'i': if (!strcmp("ID",(char*)script1)) { tmp=hex2num(script2); pc_c->id1=tmp>>8; pc_c->id2=tmp%256; pc_c->xid = pc_c->id(); } else if (!strcmp("ITEM",(char*)script1)) { int storeval=str2num(script2); scpMark m=pScp->Suspend(); retitem = Targ->AddMenuTarget(-1, 0, storeval); pScp->Resume(m); if ( retitem != NULL ) { retitem->SetContSerial(pc_c->serial); if (retitem->layer==0) { clConsole.send("Warning: Bad NPC Script %d with problem item %d executed!\n", npcNum, storeval); } } strcpy((char*)script1, "DUMMY"); // Prevents unexpected matchups... } else if (!strcmp("INT",(char*)script1) || !strcmp("INTELLIGENCE",(char*)script1)) { pc_c->in = getstatskillvalue((char*)script2); pc_c->in2 = pc_c->in; pc_c->mn = pc_c->in; } //Done Handling Stats //Handle Skills else if (!strcmp("ITEMID",(char*)script1)) pc_c->baseskill[ITEMID] = getstatskillvalue((char*)script2); else if (!strcmp("INSCRIPTION",(char*)script1)) pc_c->baseskill[INSCRIPTION] = getstatskillvalue((char*)script2); break; case 'K': case 'k': if (!strcmp("KARMA",(char*)script1)) pc_c->karma=str2num(script2); break; case 'L': case 'l': if (!strcmp("LOOT",(char*)script1)) { if (pBackpack != NULL) { scpMark m=pScp->Suspend(); retitem = Npcs->AddRandomLoot(pBackpack, script2); pScp->Resume(m); strcpy((char*)script1, "DUMMY"); // Prevents unexpected matchups... } else { clConsole.send("Warning: Bad NPC Script %d with problem no backpack for loot.\n", npcNum); } } else if (!strcmp("LODAMAGE",(char*)script1)) pc_c->lodamage=str2num(script2); else if (!strcmp("LUMBERJACKING",(char*)script1)) pc_c->baseskill[LUMBERJACKING] = getstatskillvalue((char*)script2); else if (!strcmp("LOCKPICKING",(char*)script1)) pc_c->baseskill[LOCKPICKING] = getstatskillvalue((char*)script2); break; case 'M': case 'm': if ((!(strcmp("MACEFIGHTING",(char*)script1)))||(!(strcmp("SKILL41",(char*)script1)))) pc_c->baseskill[MACEFIGHTING] = getstatskillvalue((char*)script2); else if ((!(strcmp("MINING",(char*)script1)))||(!(strcmp("SKILL45",(char*)script1)))) pc_c->baseskill[MINING] = getstatskillvalue((char*)script2); else if ((!(strcmp("MAGERY",(char*)script1)))||(!(strcmp("SKILL25",(char*)script1)))) pc_c->baseskill[MAGERY] = getstatskillvalue((char*)script2); else if ((!(strcmp("MAGICRESISTANCE",(char*)script1)))||(!(strcmp("RESIST",(char*)script1)))||(!(strcmp("SKILL26",(char*)script1)))) pc_c->baseskill[MAGICRESISTANCE] = getstatskillvalue((char*)script2); else if ((!(strcmp("MUSICIANSHIP",(char*)script1)))||(!(strcmp("SKILL29",(char*)script1)))) pc_c->baseskill[MUSICIANSHIP] = getstatskillvalue((char*)script2); else if ((!(strcmp("MEDITATION",(char*)script1)))||(!(strcmp("SKILL46",(char*)script1)))) pc_c->baseskill[MEDITATION] = getstatskillvalue((char*)script2); break; case 'N': case 'n': if (!(strcmp("NAME",(char*)script1))) pc_c->name = (char*)script2; else if (!(strcmp("NAMELIST", (char*)script1))) { scpMark m=pScp->Suspend(); setrandomname(pc_c,(char*)script2); pScp->Resume(m); strcpy((char*)script1, "DUMMY"); // To prevent accidental exit of loop. } else if (!(strcmp((char*)script1, "NOTRAIN"))) pc_c->cantrain=false; else if (!(strcmp("NPCWANDER",(char*)script1))) pc_c->npcWander=str2num(script2); else if (!(strcmp("NPCAI",(char*)script1))) pc_c->npcaitype=hex2num(script2); break; case 'O': case 'o': if (!(strcmp("ONHORSE",(char*)script1))) pc_c->onhorse=true; break; case 'P': case 'p': if (!strcmp("PARRYING",(char*)script1)) pc_c->baseskill[PARRYING] = getstatskillvalue((char*)script2); else if (!(strcmp("PRIV1",(char*)script1))) pc_c->setPriv(str2num(script2)); else if (!(strcmp("PRIV2",(char*)script1))) pc_c->priv2=str2num(script2); else if (!(strcmp("POISON",(char*)script1))) pc_c->poison=str2num(script2); else if ((!(strcmp("PEACEMAKING",(char*)script1)))||(!(strcmp("SKILL9",(char*)script1)))) pc_c->baseskill[PEACEMAKING] = getstatskillvalue((char*)script2); else if ((!(strcmp("PROVOCATION",(char*)script1)))||(!(strcmp("SKILL22",(char*)script1)))) pc_c->baseskill[PROVOCATION] = getstatskillvalue((char*)script2); else if ((!(strcmp("POISONING",(char*)script1)))||(!(strcmp("SKILL30",(char*)script1)))) pc_c->baseskill[POISONING] = getstatskillvalue((char*)script2); else if (!(strcmp("PACKITEM",(char*)script1))) { if (pBackpack != NULL) { int storeval=str2num(script2); scpMark m=pScp->Suspend(); retitem = Targ->AddMenuTarget(-1, 0, storeval); pScp->Resume(m); if (retitem != NULL) { retitem->SetContSerial(pBackpack->serial); retitem->pos.x=50+(rand()%80); retitem->pos.y=50+(rand()%80); retitem->pos.z=9; } strcpy((char*)script1, "DUMMY"); // Prevents unexpected matchups... } else { clConsole.send("Warning: Bad NPC Script %d with problem no backpack for packitem.\n", npcNum); } } break; case 'R': case 'r': if (!(strcmp("RACE",(char*)script1))) pc_c->race=str2num(script2); else if (!(strcmp("REATTACKAT",(char*)script1))) pc_c->reattackat=str2num(script2); else if ((!(strcmp("REMOVETRAPS",(char*)script1)))||(!(strcmp("SKILL48",(char*)script1)))) pc_c->baseskill[REMOVETRAPS] = getstatskillvalue((char*)script2); else if (!(strcmp("RSHOPITEM",(char*)script1))) { if ( shoppack1 == NULL) { AllItemsIterator iterItems; for(iterItems.Begin(); !iterItems.atEnd(); iterItems++) { P_ITEM pz = iterItems.GetData(); if (!pz->free) { if (pc_c->Wears(pz) && pz->layer==0x1A) { shoppack1 = pz; break; } } } //if (shoppack1 == -1) //LogError("Error creating shoppack1\n"); } if ( shoppack1 != NULL ) { int storeval=str2num(script2); scpMark m=pScp->Suspend(); retitem = Targ->AddMenuTarget(-1, 0, storeval); pScp->Resume(m); if (retitem != NULL) { retitem->SetContSerial(shoppack1->serial); retitem->pos.x=50+(rand()%80); retitem->pos.y=50+(rand()%80); retitem->pos.z=9; if (retitem->name2 != "#") retitem->name = retitem->name2; // Item identified! -- by Magius(CHE) } } strcpy((char*)script1, "DUMMY"); // Prevents unexpected matchups... } else { clConsole.send("Warning: Bad NPC Script %d with problem no shoppack1 for item.\n", npcNum); } } break; case 'S': case 's': if (!(strcmp("SKIN",(char*)script1))) { pc_c->skin = pc_c->xskin = hex2num(script2); } else if (!(strcmp("SHOPKEEPER", (char*)script1))) { scpMark m=pScp->Suspend(); Commands->MakeShop(pc_c); pScp->Resume(m); } else if (!(strcmp("SELLITEM",(char*)script1))) { if (shoppack3 == NULL) { AllItemsIterator iterItems; for(iterItems.Begin(); !iterItems.atEnd(); iterItems++) { P_ITEM pz = iterItems.GetData(); if (!pz->free) { if (pc_c->Wears(pz) && pz->layer==0x1C) { shoppack3 = pz; break; } } } } if ( shoppack3 != NULL ) { int storeval=str2num(script2); scpMark m=pScp->Suspend(); retitem = Targ->AddMenuTarget(-1, 0, storeval); pScp->Resume(m); if (retitem != NULL) { retitem->SetContSerial(shoppack3->serial); retitem->value=retitem->value/2; retitem->pos.x=50+(rand()%80); retitem->pos.y=50+(rand()%80); retitem->pos.z=9; if (retitem->name2 != "#") retitem->name = retitem->name2; // Item identified! -- by Magius(CHE) } } strcpy((char*)script1, "DUMMY"); // Prevents unexpected matchups... } else { clConsole.send("Warning: Bad NPC Script %d with problem no shoppack3 for item.\n", npcNum); } } else if (!(strcmp("SHOPITEM",(char*)script1))) { if ( shoppack2 == NULL ) { AllItemsIterator iterItems; for (iterItems.Begin(); !iterItems.atEnd(); iterItems++) { P_ITEM pz = iterItems.GetData(); if (!pz->free) { if (pc_c->Wears(pz) && pz->layer==0x1B) { shoppack2 = pz; break; } } } } if (shoppack2 != NULL) { int storeval = str2num(script2); scpMark m = pScp->Suspend(); retitem = Targ->AddMenuTarget(-1, 0, storeval); pScp->Resume(m); if ( retitem != NULL) { retitem->SetContSerial(shoppack2->serial); retitem->pos.x=50+(rand()%80); retitem->pos.y=50+(rand()%80); retitem->pos.z=9; if (retitem->name2 != "#") retitem->name = retitem->name2; // Item identified! -- by Magius(CHE) } } strcpy((char*)script1, "DUMMY"); // Prevents unexpected matchups... } else { clConsole.send("Warning: Bad NPC Script %d with problem no shoppack2 for item.\n", npcNum); } } else if (!(strcmp("SPATTACK",(char*)script1))) pc_c->spattack=str2num(script2); else if (!(strcmp("SPEECH",(char*)script1))) pc_c->speech=str2num(script2); else if (!(strcmp("SPLIT",(char*)script1))) pc_c->split=str2num(script2); else if ((!(strcmp("STR",(char*)script1)))||(!(strcmp("STRENGTH",(char*)script1)))) { pc_c->st = getstatskillvalue((char*)script2); pc_c->st2 = pc_c->st; pc_c->hp = pc_c->st; } else if (!(strcmp("SPLITCHANCE",(char*)script1))) pc_c->splitchnc=str2num(script2); else if (!(strcmp("SAYCOLOR",(char*)script1))) pc_c->saycolor = static_cast<UI16>(hex2num(script2)); else if (!(strcmp("SPADELAY",(char*)script1))) pc_c->spadelay=str2num(script2); else if ((!(strcmp("SPIRITSPEAK",(char*)script1)))||(!(strcmp("SKILL32",(char*)script1)))) pc_c->baseskill[SPIRITSPEAK] = getstatskillvalue((char*)script2); else if ((!(strcmp("STEALTH",(char*)script1)))||(!(strcmp("SKILL47",(char*)script1)))) pc_c->baseskill[STEALTH] = getstatskillvalue((char*)script2); else if ((!(strcmp("SWORDSMANSHIP",(char*)script1)))||(!(strcmp("SKILL40",(char*)script1)))) pc_c->baseskill[SWORDSMANSHIP] = getstatskillvalue((char*)script2); else if ((!(strcmp("SNOOPING",(char*)script1)))||(!(strcmp("SKILL28",(char*)script1)))) pc_c->baseskill[SNOOPING] = getstatskillvalue((char*)script2); else if ((!(strcmp("STEALING",(char*)script1)))||(!(strcmp("SKILL33",(char*)script1)))) pc_c->baseskill[STEALING] = getstatskillvalue((char*)script2); else if (!(strcmp("SKINLIST",(char*)script1))) { scpMark m=pScp->Suspend(); pc_c->xskin = pc_c->skin = addrandomcolor(pc_c,(char*)script2); pScp->Resume(m); strcpy((char*)script1, "DUMMY"); // To prevent accidental exit of loop. } else if (!(strcmp("SKILL", (char*)script1))) { gettokennum((char*)script2, 0); z=str2num(gettokenstr); gettokennum((char*)script2, 1); pc_c->baseskill[z]=str2num(gettokenstr); } else if (!(strcmp("STABLEMASTER",(char*)script1))) pc_c->npc_type=1; break; case 'T': case 't': if (!(strcmp("TITLE",(char*)script1))) pc_c->title = script2; else if ((!(strcmp("TOTAME", (char*)script1)))||(!(strcmp("TAMING", (char*)script1)))) pc_c->taming=str2num(script2); else if (!(strcmp("TRIGGER",(char*)script1))) pc_c->trigger=str2num(script2); else if (!(strcmp("TRIGWORD",(char*)script1))) pc_c->trigword = (char*)script2; else if ((!(strcmp("TACTICS",(char*)script1)))||(!(strcmp("SKILL27",(char*)script1)))) pc_c->baseskill[TACTICS] = getstatskillvalue((char*)script2); else if ((!(strcmp("TAILORING",(char*)script1)))||(!(strcmp("SKILL34",(char*)script1)))) pc_c->baseskill[TAILORING] = getstatskillvalue((char*)script2); else if ((!(strcmp("TAMING",(char*)script1)))||(!(strcmp("SKILL35",(char*)script1)))) pc_c->baseskill[TAMING] = getstatskillvalue((char*)script2); else if ((!(strcmp("TASTEID",(char*)script1)))||(!(strcmp("SKILL36",(char*)script1)))) pc_c->baseskill[TASTEID] = getstatskillvalue((char*)script2); else if ((!(strcmp("TINKERING",(char*)script1)))||(!(strcmp("SKILL37",(char*)script1)))) pc_c->baseskill[TINKERING] = getstatskillvalue((char*)script2); else if ((!(strcmp("TRACKING",(char*)script1)))||(!(strcmp("SKILL38",(char*)script1)))) pc_c->baseskill[TRACKING] = getstatskillvalue((char*)script2); break; case 'V': case 'v': if (!(strcmp("VALUE",(char*)script1))) if (retitem != NULL) retitem->value=(str2num(script2)); else if (!strcmp("VETERINARY",(char*)script1)) pc_c->baseskill[VETERINARY] = getstatskillvalue((char*)script2); break; case 'W': case 'w': if ((!(strcmp("WRESTLING",(char*)script1)))||(!(strcmp("SKILL43",(char*)script1)))) pc_c->baseskill[WRESTLING] = getstatskillvalue((char*)script2); break; default: clConsole.send("Warning: Fall out of switch statement in npcs.cpp AddNPC()\n"); } //Done Handling Skills //Handle Extras //Done Handling Obsolete Stuff //--------------- DONE NEW STAT & SKILL FORMAT --------------------- }
void loadregions()//New -- Zippy spawn regions { int i, noregion, l=0, a=0,loopexit=0; char sect[512]; int actgood=INVALID; // Magius(CHE) cScpIterator* iter = NULL; char script1[1024]; char script2[1024]; for (i=0;i<256;i++) { region_st ®ionRef = region[i]; regionRef.inUse = false; regionRef.midilist=0; regionRef.priv=0; regionRef.drychance=0; regionRef.keepchance=0; regionRef.wtype = 0; regionRef.snowchance=0; regionRef.rainchance=0; regionRef.forcedseason = INVALID; regionRef.ignoreseason = false; regionRef.name[0]=0; noregion=0; for (a=0;a<10;a++) { regionRef.guardnum[a]=RandomNum(1000,1001); } for (a=0;a<100;a++) // added by Magius(CHE) { regionRef.goodsell[a]=0; regionRef.goodbuy[a]=0; regionRef.goodrnd1[a]=0; regionRef.goodrnd2[a]=0; } a=0; // end added by Magius(CHE) sprintf(sect, "SECTION REGION %i", i); safedelete(iter); //as the name implies, this is safe :P, Xan iter = Scripts::Regions->getNewIterator(sect); if (iter==NULL) { noregion=1; continue; //-> goes next loop! } regionRef.inUse = true; loopexit=0; do { iter->parseLine(script1, script2); if ((script1[0]!='}')&&(script1[0]!='{')) { if (!(strcmp("GUARDNUM",script1))) { if (a<10) { regionRef.guardnum[a]=str2num(script2); a++; } else { LogWarning("region %i has more than 10 'GUARDNUM', The ones after 10 will not be used\n",i); } } else if (!(strcmp("NAME",script1))) { strcpy(regionRef.name,script2); actgood=INVALID; // Magius(CHE) } // Dupois - Added April 5, 1999 // To identify whether this region is escortable or not. else if (!(strcmp("ESCORTS",script1))) { // Load the region number in the global array of valid escortable regions if ( str2num(script2) == 1 ) { // Store the region index into the valid escort region array validEscortRegion[escortRegions] = i; escortRegions++; } } // End - Dupois else if (!(strcmp("GUARDOWNER",script1))) strcpy(regionRef.guardowner,script2); else if (!(strcmp("MIDILIST",script1))) regionRef.midilist=str2num(script2); else if (!(strcmp("GUARDED",script1))) { if (str2num(script2)) regionRef.priv|=0x01; } else if (!(strcmp("MAGICDAMAGE",script1))) { if ((str2num(script2))) regionRef.priv|=0x40; // bugfix LB 12-march- // changes from 0=magicdamge,1=no magic damage // to 1= 0= } else if (!(strcmp("NOMAGIC",script1))) { if ((str2num(script2))) regionRef.priv|=0x80; } else if (!(strcmp("MARK",script1))) { if (str2num(script2)) regionRef.priv|=0x02; } else if (!(strcmp("GATE",script1))) { if (str2num(script2)) regionRef.priv|=0x04; } else if (!(strcmp("RECALL",script1))) { if (str2num(script2)) regionRef.priv|=0x08; } else if (!(strcmp("SNOWCHANCE", script1))) { regionRef.snowchance=str2num(script2); } else if (!(strcmp("RAINCHANCE", script1))) { regionRef.rainchance=str2num(script2); } //xan : quick&dirty weather system :) else if (!(strcmp("DRYCHANCE", script1))) { regionRef.drychance=str2num(script2); } else if (!(strcmp("KEEPCHANCE", script1))) { regionRef.keepchance=str2num(script2); } else if (!(strcmp("FORCESEASON", script1))) { regionRef.forcedseason =str2num(script2); } else if (!(strcmp("IGNOREMONTHMULTIPLIERS", script1))) { regionRef.ignoreseason =true; } else if (!(strcmp("GOOD", script1))) // Magius(CHE) { actgood=str2num(script2); } else if (!(strcmp("BUYABLE", script1))) // Magius(CHE) { if (actgood>INVALID) regionRef.goodbuy[actgood]=str2num(script2); else LogError("error in regions.xss. You must write BUYABLE after GOOD <num>!\n"); } else if (!(strcmp("SELLABLE", script1))) // Magius(CHE) { if (actgood>INVALID) regionRef.goodsell[actgood]=str2num(script2); else LogError("error in regions.xss. You must write SELLABLE after GOOD <num>!\n"); } else if (!(strcmp("RANDOMVALUE", script1))) // Magius(CHE) (2) { if (actgood>INVALID) { gettokennum(script2, 0); regionRef.goodrnd1[actgood]=str2num(gettokenstr); gettokennum(script2, 1); regionRef.goodrnd2[actgood]=str2num(gettokenstr); if (regionRef.goodrnd2[actgood]<regionRef.goodrnd1[actgood]) { LogError("error in regions.xss. You must write RANDOMVALUE NUM2[%i] grater than NUM1[%i].\n",regionRef.goodrnd2[actgood],regionRef.goodrnd1[actgood]); regionRef.goodrnd2[actgood]=regionRef.goodrnd1[actgood]=0; } } else LogError("error in regions.xss. You must write RANDOMVALUE after GOOD <num>!\n"); } else if (!(strcmp("X1", script1))) { location[l].x1=str2num(script2); } else if (!(strcmp("X2", script1))) { location[l].x2=str2num(script2); } else if (!(strcmp("Y1", script1))) { location[l].y1=str2num(script2); } else if (!(strcmp("Y2", script1))) { location[l].y2=str2num(script2); location[l].region=i; l++; } } } while (script1[0]!='}' && !noregion && (++loopexit < MAXLOOPS) ); } locationcount=l; logoutcount=0; //Instalog strcpy(sect, "SECTION INSTALOG"); safedelete(iter); //as the name implies, this is safe :P, Xan iter = Scripts::Regions->getNewIterator(sect); if (iter==NULL) return; loopexit=0; do { iter->parseLine(script1, script2); if(!(strcmp(script1,"X1"))) logout[logoutcount].x1=str2num(script2); if(!(strcmp(script1,"Y1"))) logout[logoutcount].y1=str2num(script2); if(!(strcmp(script1,"X2"))) logout[logoutcount].x2=str2num(script2); if(!(strcmp(script1,"Y2"))) { logout[logoutcount].y2=str2num(script2); logoutcount++; } } while ( (script1[0]!='}') && (++loopexit < MAXLOOPS) ); safedelete(iter); }